home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / scopedisk24 / Qrt14src / QrtPost.c < prev    next >
C/C++ Source or Header  |  1988-08-23  |  3KB  |  127 lines

  1. /*********************************************************
  2.  
  3.   QrtPost is a post processor for QRT on the Commodode
  4.   Amiga.  It reads in the QRT file, and spits it out
  5.   as a 4096 color bitmap which can be converted to
  6.   IFF/HAM by another program.
  7.  
  8.  *********************************************************/
  9.  
  10. #include <stdio.h>
  11.  
  12. #define MAXXRES 640      /* max x resolution */
  13. #define SHIFT 3          /* convert 0..127 to 0..15 */
  14.  
  15. main(argc,argv)
  16.   int argc;
  17.   char *argv[];
  18. {
  19.   int xres, yres, line;
  20.   register int x, value;
  21.   unsigned short r[MAXXRES], g[MAXXRES], b[MAXXRES];
  22.   FILE *in, *out;
  23.   unsigned char fgetc();
  24.  
  25.   if (argc != 3) {
  26.     printf("Usage: %s InFile OutFile\n",argv[0]);
  27.     exit(1);
  28.   }
  29.  
  30.   /** open files **/
  31.  
  32.   if ((in = fopen(argv[1],"r"))==NULL) {
  33.     printf("Couldn't open file %s\n",argv[1]);
  34.     exit(1);
  35.   }
  36.  
  37.   if ((out = fopen(argv[2],"w"))==NULL) {
  38.     printf("Couldn't open file %s\n",argv[2]);
  39.     exit(1);
  40.   }
  41.  
  42.   /** load x and y resolution **/
  43.  
  44.   xres = yres = 0;
  45.  
  46.   xres  = ((unsigned int)fgetc(in));
  47.   xres += ((unsigned int)(fgetc(in) << 8));
  48.  
  49.   yres  = ((unsigned int)fgetc(in));
  50.   yres += ((unsigned int)(fgetc(in) << 8));
  51.  
  52.   /** print info **/
  53.  
  54.   printf("\nInput  file  = %s\n",   argv[1]);
  55.   printf("Output file  = %s\n\n",   argv[2]);
  56.   printf("X resolution = %d\n",     xres);
  57.   printf("Y resolution = %d\n\n",   yres);
  58.  
  59.   while (!feof(in)) {
  60.     line  = ((int)fgetc(in));                 /* read scan line number */
  61.     line |= ((int)(fgetc(in) << 8));
  62.  
  63.     if (line >= yres) {
  64.       printf("Faulty data file.\n");
  65.       exit(1);
  66.     }
  67.  
  68.     for (x=0; x<xres; x++)                    /* read color data */
  69.       r[x] = ((short)fgetc(in)) & 0xff;
  70.  
  71.     for (x=0; x<xres; x++)
  72.       g[x] = ((short)fgetc(in)) & 0xff;
  73.  
  74.     for (x=0; x<xres; x++)
  75.       b[x] = ((short)fgetc(in)) & 0xff;
  76.  
  77.     fputc((unsigned char)(line>>8),out);      /* write line number */
  78.     fputc((unsigned char)(line&0xff),out);
  79.  
  80.     for (x=0; x<(xres/4); x++) {              /* write color data */
  81.        value  = (r[4*x+3] >> SHIFT);
  82.        value  = value << 4;
  83.        value += (r[4*x+2] >> SHIFT);
  84.        fputc((unsigned char)(value),out);
  85.  
  86.        value  = (r[4*x+1] >> SHIFT);
  87.        value  = value << 4;
  88.        value += (r[4*x+0] >> SHIFT);
  89.  
  90.        fputc((unsigned char)(value),out);
  91.     }
  92.  
  93.     for (x=0; x<(xres/4); x++) {              /* write color data */
  94.        value  = (g[4*x+3] >> SHIFT);
  95.        value  = value << 4;
  96.        value += (g[4*x+2] >> SHIFT);
  97.        fputc((unsigned char)(value),out);
  98.  
  99.        value  = (g[4*x+1] >> SHIFT);
  100.        value  = value << 4;
  101.        value += (g[4*x+0] >> SHIFT);
  102.  
  103.        fputc((unsigned char)(value),out);
  104.     }
  105.  
  106.     for (x=0; x<(xres/4); x++) {              /* write color data */
  107.        value  = (b[4*x+3] >> SHIFT);
  108.        value  = value << 4;
  109.        value += (b[4*x+2] >> SHIFT);
  110.        fputc((unsigned char)(value),out);
  111.  
  112.        value  = (b[4*x+1] >> SHIFT);
  113.        value  = value << 4;
  114.        value += (b[4*x+0] >> SHIFT);
  115.  
  116.        fputc((unsigned char)(value),out);
  117.     }
  118.  
  119.   }
  120.  
  121.   fclose(in);                                 /* close files */
  122.   fclose(out);
  123.  
  124. }
  125.  
  126.  
  127.